// 统一封装接口方法
import request from '@/utils/request.js'
import { getStorage } from '@/utils/storage.js'

//既引入也同时向外按需导出，所有引入过来的方法
export * from './ArticleDetail.js'

// 登录接口
export const loginAPI = ({ mobile, code }) =>
    request({
        url: '/v1_0/authorizations',
        method: 'POST',
        data: {
            mobile,
            code
        }
    })

//用户-刷新token
export const getNewTokenAPI = () =>
    request({
        url: 'v1_0/autothorizations',
        method: 'PUT',
        headers: {
            //请求拦截器同意携带的是token，而这次请求，需要带的是refresh_token
            Authorization: 'Bearer ' + getStorage('refresh_token')
        }
    })

// 获取所有频道
export const getAllChannelsAPI = () =>
    request({
        url: '/v1_0/channels',
        method: 'GET'
    })

// 获取用户选择的频道
// 注意：用户没有登录，默认返回后台设置的默认频道列表
export const getUserChannelsAPI = () =>
    request({
        url: '/v1_0/user/channels'
    })

// 用户-关注
export const userFllowedAPI = (userId) =>
    request({
        url: '/v1_0/user/followings',
        method: 'POST',
        data: {
            target: userId
        }
    })

// 用户取消关注
export const userUnFllowedAPI = (userId) =>
    request({
        url: `/v1_0/user/followings/${userId}`,
        method: 'DELETE'
    })

// 用户-获取个人资料
export const userProfileAPI = () =>
    request({
        url: '/v1_0/user/profile'
    })

// 用户-获取基本信息（我的页面显示数据）
export const getUserInfoAPI = () =>
    request({
        url: '/v1_0/user'
    })

// 用户-更新头像
export const updateUserPhotoAPI = (fd) =>
    request({
        url: '/v1_0/user/photo',
        method: 'PATCH',
        data: fd // fd：外面传进来的new formData()表单对象
            // 如果你的请求体直接时formData表单对象，你也不用自己添加content_Type，
            // axios发现数据请求体是表单对象，它也不会转换呈json字符串
            // 也不会带content-Ty：application/json,而是交给浏览器，浏览器发现请求体是formData会自己携带conten-Type
            // content-type:applicaton/json;axios携带的,前提:data请求体是对象->json字符串->发给后台
    })

// 用户-更新基本资料
export const updateUserProfileAPI = (dataObj) => {
    // 判断有值才带参数名给后台，无值参数名不携带
    const obj = {
        name: '',
        gender: 0,
        birthday: '',
        intro: ''
    }
    for (const prop in obj) {
        // 遍历参数对象里每个key
        if (dataObj[prop] === undefined) {
            // 用key去外面传入的参数对象匹配，如果没有找到（证明外面没传这个参数）
            delete obj[prop] // 从obj身上溢出这对属性和值
        } else {
            obj[prop] = dataObj[prop] // 如果使用了，就从外面对象取出对应key，保存到obj
        }
    }
    return request({
        url: '/v1_0/user/profile',
        method: 'PATCH', // 局部更新
        data: obj
            // data: {
            //     name, // 昵称
            //     gender, // 性别0：男,1:女
            //     birthday, // 生日（要求格式：年-月-日 字符串）
            //     intro // 个人介绍
            // }
    })
}

// 频道-更新覆盖频道
export const updateChannelsAPI = ({ channels }) =>
    request({
        url: '/v1_0/user/channels',
        method: 'PUT',
        data: {
            channels // 用户已选整个频道数组
        }
    })

// 删除-用户指定的频道
export const removeTheChannelAPI = ({ channelId }) =>
    request({
        url: '/v1_0/user/channels/$(channelId)',
        method: 'DELETE'
    })

// 搜索-联想菜单
export const suggestListAPI = ({ keywords }) =>
    request({
        url: 'v1_0/suggestion',
        params: {
            q: keywords
        }
    })

// 搜索-搜索结果列表
export const searchResultAPI = ({ page, per_page, q }) =>
    request({
        url: '/v1_0/search',
        method: 'GET',
        params: {
            page,
            per_page,
            q
        }
    })